home *** CD-ROM | disk | FTP | other *** search
- /* FUNKEY.C - a program for redefining fyunction keys */
- /* */
- /* Copyright (C) 1983 Kenneth C. Wood */
- /* */
- /* From PC Magazine - - June 1983 Page 424 */
- /* */
- /* Works with IBM PC-DOS 2.0 - to use it, have on your */
- /* system disk the files: */
- /* ANSI.SYS - supplied with DOS */
- /* CONFIG.SYS - file with the line "device = ansi.sys" in it */
- /* and one or more files with the extension .KEY i.e. */
- /* WORDSTAR.KEY, MYOWN.KEY, FUNKEY.KEY, or */
- /* DOS.KEY - supplied by you and containing */
- /* your chosen new key definitions, and of course */
- /* FUNKEY.EXE - the compiled and linked FUNKEY.C */
- /* */
- /* Now when the system is booted, the ANSI terminal */
- /* emulator device driver will be installed, giving */
- /* you the capability to do marvelous things, including */
- /* redefine the function keys by issuing the command: */
- /* FUNKEY MYOWN.KEY */
-
-
- #define SEQ "\033[0;" /* Initial sequence to ANSI driver */
-
- #include "stdio.h" /* Copy in the standard I/O routines */
-
- main(argc,argv)
- int argc;
- char *argv[];
-
- {
- FILE *fp, *fopen();
-
- if (argc == 1)
- {
- printf("\nEnter new key definitions\n\n");
- fkey(stdin); /* get input from keyboard */
- }
- else
- {
- fp = fopen(*++argv,"r");
- fkey(fp); /* get input from the file */
- }
- }
-
- int count = 0; /* counter for tracking size of the table */
-
- fkey(fp)
- FILE *fp;
- {
- int c,offset;
- /* input character and function key identifier */
-
- while((c=getch(fp)) != EOF)
- {
- switch (c)
- {
- case 'f': /* F1 through F10 */
- offset = 58;
- func(getch(fp),offset,fp);
- break;
- case 's': /* Shift F1 through F10 */
- offset = 83;
- func(getch(fp),offset,fp);
- break;
- case 'c': /* Control F1 through F10 */
- offset = 93;
- func(getch(fp),offset,fp);
- break;
- case 'a': /* Alt F1 through F10 */
- offset = 103;
- func(getch(fp),offset,fp);
- break;
- case 'F': /* F1 through F10 */
- offset = 58;
- func(getch(fp),offset,fp);
- break;
- case 'S': /* Shift F1 through F10 */
- offset = 83;
- func(getch(fp),offset,fp);
- break;
- case 'C': /* Control F1 through F10 */
- offset = 93;
- func(getch(fp),offset,fp);
- break;
- case 'A': /* Alt F1 through F10 */
- offset = 103;
- func(getch(fp),offset,fp);
- break;
- default:
- printf("Unknown function key\n");
- break;
- }
- }
- }
-
- getch(fp)
- /* throw away white space until a character */
- FILE *fp;
- {
- int x;
-
- while((x=getc(fp)) == ' '|| x == '\n' || x == '\t')
- ; /* ignore white space */
- return(x);
- }
-
-
- func(c,offset,fp)
- /* send out the required definition sequence */
- int c,offset;
- FILE *fp;
- {
- int x,save;
-
- save = ' ';
- while ((x = getch(fp)) != '=')
- if (x == '0') c = ':';
- /* read until get = sign */
- /* if character is 0 then F10 was chosen */
- /* rather than F1. Change c so that offset is */
- /* calculated correctly */
- printf(SEQ);
- printf("%d",offset+(c-'0'));
-
- /* putchar(';');
- putchar('"');
- */
- while ((x = getc(fp)) != '\n')
- {
- if (x != '!')
- {
- /* putchar(x); */
- printf(";%2d",x);
-
- if (++count == 128)
- {
- printf("\nTable size exceeded. Program terminated...\n");
- exit();
- }
- }
- else
- save = x;
- }
- /*putchar('"');*/
- if (save == '!')
- {
- printf(";13p");
- count++;
- }
- else
- printf("p");
- save = ' ';
- if (count == 128)
- {
- printf("\nTable size exceeded. Program terminated...\n");
- exit();
- }
- }
-
- /* end of Program Funkey.C */
-
-